﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MJM.RPP.AccesoDatos;
using MJM.RPP.EntidadesNegocio;
using System.Security.Cryptography;

namespace MJM.RPP.ComponentesNegocio
{
    public class UsuarioCN
    {
        public int InsertarUsuario(UsuarioE objUsuarioE)
        {
            objUsuarioE.FechaRegistro = DateTime.Now;
            objUsuarioE.Eliminado = 2;
            string encript=Encripta(objUsuarioE.Usuario+objUsuarioE.Pass);
            objUsuarioE.UserConfirmacion = encript;
            encript = Encripta(objUsuarioE.IDPersona);
            objUsuarioE.IDConfirmacion=encript;
            UsuarioAD obj = new UsuarioAD();
            return obj.Registrar(objUsuarioE);
        }

        public bool ValidarUsuario(String Usuario)
        {
            bool tramite,padron;
            UsuarioAD objAD = new UsuarioAD();
            int total = objAD.ValidarUsuario(Usuario);

            if (total >= 1)
                padron = false;
            else
                padron = true;

            tramite = objAD.ValidaUsuarioTramite(Usuario);

            if (!tramite && padron)
                return true;

            return false;
        }

        public String Encripta(String TextClaro)
        {
            MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();

            byte[] data = System.Text.Encoding.ASCII.GetBytes(TextClaro);
            data = provider.ComputeHash(data);
            string md5 = string.Empty;
            for (int i = 0; i < data.Length; i++)
                md5 += data[i].ToString("x2").ToLower();
            return md5;
        }

        public UsuarioE ValidaCuenta(String UserConfirm, String IDConfirm)
        {
            UsuarioAD objAD = new UsuarioAD();
            UsuarioE miuser = objAD.ValidarCuenta(UserConfirm,IDConfirm);
            if(UserConfirm!=null)            
                return miuser;
            else
                return null;
        }

        public void ActualizaEstado(UsuarioE miuser)
        {
            UsuarioAD objAD = new UsuarioAD();
            objAD.ActualizaEstado(miuser);
        }

        public PersonaE UsuarioLogin(string usuario, string clave)
        {
            UsuarioAD objUsuAD = new UsuarioAD();
            PersonaAD objPerAD = new PersonaAD();
            string Idper = objUsuAD.ObtenerIDPerLog(usuario, clave);
            PersonaE obje;
            if (Idper != "")
            {
                obje = objPerAD.ObtenerPersona(Idper);
                return obje;
            }
            else
                return null;
        }

        public PersonaE UsuarioTramite(string usuario, string clave)
        {
            UsuarioAD objUsuarioAD = new UsuarioAD();
            string user = objUsuarioAD.ObtenerIDPerTramite(usuario.ToUpper(), clave);
            if (user != "")
            {
                PersonaCN objPersonaCN=new PersonaCN();
                PersonaE objPersonaEN = objPersonaCN.ObtenerPerTramite(usuario);
                return objPersonaEN;
            }

            return null;
        }

        public bool ConfirmaContrasenia(string usuario, string contrasenia)
        {
            UsuarioAD objUsuAD = new UsuarioAD();
            string Idper = objUsuAD.ObtenerIDPerLog(usuario, contrasenia);
            if (Idper != "")
                return true;
            return false;
        }

        public UsuarioE Obtener(String IDPersona)
        {
            UsuarioAD objAD = new UsuarioAD();
            PersonaTramiteCN objPerTraM= new PersonaTramiteCN();
           
            UsuarioE user = objAD.ObtenerUsuario(IDPersona);
            if (user.Usuario == null)
            {
                PersonaTramiteEN obj = objPerTraM.Obtener(Convert.ToInt32(IDPersona));
                user.Usuario = obj.Usuario;
            }
            return user;
        }

        public int CambiarClaveTramite(String Usuario, string clave)
        {
            UsuarioAD objAD = new UsuarioAD();
            return objAD.CambiarClaveTramite(Usuario, clave);
        }
    }
}
